# # 2： 输入一个字符串。请完成如下任务：
# # （1）打印第一字符；
# # （2）打印最后一个字符；
# # （3）如果是奇数,打印中间的字符串（len(字符串)）；
# # （4）打印倒数3个字符；
# # （5）倒叙打印字符串。
#
# if __name__=="__main__":
#     _str = input("请输入一个字符串: ")
#
#     print(f"第一个字符:{_str[0]}")
#
#     print(f"最后一个字符:{_str[-1]}")
#
#     if len(_str) % 2 != 0:
#         mid = len(_str) // 2
#         print(f"中间的字符:{_str[mid]}")
#
#     if len(_str) >= 3:
#         print(f"倒数三个字符:{_str[-3:]}")
#     else:
#         print("字符串长度不足三个字符。")
#
#     print(f"倒序打印字符串:{_str[::-1]}")

# #3：将一个成序列乘以3生一个新的序列并输出，达到“重要事情说三遍”的效果。（用两种方法创建list，[]或者list()）
# #（1）
# if __name__=="__main__":
#     study_1 = ['好好学习']*3
#     print(study_1)
#
# #（2）
# if __name__=="__main__":
#     study_2 = list("好好学习")
#     new_study_2 = []
#     for i in range(3):
#         new_study_2.append(study_2)
#     print(new_study_2)
#
#
# # 4：把字符串“when the going gets tough you deal with it”
# # 存储到序列数据类型sentence 变量当中,要检查名称为sentence的序列中list，是否包含元素“tough”。（注意重点list存储）
#
# if __name__=="__main__":
#     num = "when the going gets tough you deal with it"
#     num = num.split()
#     n = "tough" in num
#     print(n)
#
#
# #5：小明准备去旅游，预算有限的情况下，通过python程序帮助小明实现旅游的景点的输出。景点包含
# # （大兴安岭, 呼伦贝尔草原, 黄果树瀑布, 鸣沙山, 泰山,雅鲁藏布江大峡谷），去掉一个鸣沙山，增加一个南阳医圣祠。
# # 最后输出小明去的景点。连成一条句子。（注意考察的list的取元素）
# if __name__=="__main__":
#     sum = ["大兴安岭", "呼伦贝尔草原", "黄果树瀑布", "鸣沙山", "泰山", "雅鲁藏布江大峡谷"]
#
#     sum.remove("鸣沙山")
#     sum.append("南阳医圣祠")
#     sentence = "小明准备去的旅游景点有：{}。".format(", ".join(sum))
#     print(sentence)
#
#6.输入学生成绩，计算总分，最高分，最低分。对列表（[1, 58, 98, 12, 68, 32]）部分范围的元素进行排序。
# if __name__=="__main__":
#     # 定义学生成绩列表
#     scores = [1, 58, 98, 12, 68, 32]
#     sum = sum(scores)
#     print(f"总分: {sum}")
#
#     _max = max(scores)
#     print(f"最高分: {_max}")
#
#     # 计算最低分
#     _min= min(scores)
#     print(f"最低分: {_min}")
#
#     _sort = scores[1:4]
#     _sort.sort()
#
#     print(f"部分范围排序后的成绩: {_sort}")
#
# #7.有一组商品形成的价格列表，应用列表推导式生成一个打85折扣的价格列表
# if __name__=="__main__":
#     sum = [100, 120, 130, 140, 150]
#
#     sum = [i * 0.85 for i in sum]
#
#     print(sum)
#
# # #8：利用元组输出30以内3的倍数的奇数元组数据。
# if __name__=='__main__':
#
#     sum_1 = []
#     for i in range(0,31):
#         if i % 2!=0:
#             sum_1.append(i)
#     sum_2 = []
#
# #     for i in sum_1:
# #         if i % 3==0:
# #             sum_2.append(i)
# #     _tuple = tuple(sum_2)
# #
# #     print(_tuple)
# #
# #9：有如下元组，请按照功能要求实现每一个功能。
# # hobby = ('swim', 'sing', 'dance',"swim")
# # （1）利用元组生成器重新生成新的元组hobby
# # （2）计算元组的长度并输出
# # （3）获取元组的第二个元素，并输出
# # （4）获取元组的第1-2个元素，并输出。
# # （5）查看swim在元组出现的次数
# # （6）查看swim第一次出现的索引位置
#
# if __name__=="__main__":
#     hobby = ('swim', 'sing', 'dance', 'swim')
#
#     new_hobby = tuple(hobby)
#     print(new_hobby)
#
#     hobby_len = len(hobby)
#     print(hobby_len)
#
#     n_2 = hobby[1]
#     print(n_2)
#
#
#     n_0_2 = hobby[:2]
#     print(n_0_2)
#
#     n_swim = hobby.count('swim')
#     print(n_swim)
#
#     n= hobby.index('swim')
#     print(n)

# #10：有一位三年级的小朋友，总是记不住1-12月的英文单词。
# # #请你编写一个小工具，输入月份，就能输出对应的单词。（提示：使用字典推导式合并字典）
#
# if __name__=="__main__":
#     dic = {1: "January", 2: "Feb", 3: 'March', 4: 'April', 5: 'May', 6: 'June', 7: 'July', 8: 'August', 9: 'September',
#            10: 'October', 11: 'November', 12: 'December'}
#     n = int(input("请输入月份:"))
#
#     print(f"月份：{dic[n]}")

# 11：已知字典dic_info={‘姓名’:‘初心’,’地址’:’北京,’电话号码’:’13456789128’}。 （注意每个小项的结果都要格式化输出dict_info）
# （1）分别输出字典dic_info中所有的“键”（key）、“值”（value）的信息。
# （2）将字典dic_info中所有的“键”（key）、“值”（value）的信息分别以列表形式输出。
# （3）输出字典dic_info中地址的值。
# （4）修改字典dic_info中电话号码的值为’18987965858’。
# （5）添加键值对“班级”:’python’，并输出。
# （6）用两种方法删除字典dic_info中的地址键对值。
# （7）返回“工资”键对应的“值”信息，并观察返回后的结果。
# （8）随机删除字典dic_info中的一个“键值对”。
# （9）清空字典dic_info。

# import random
# if __name__=="__main__":
#     dic_ = {'姓名': '初心', '地址': '北京', '电话号码': '13456789128'}
#     keys = dic_.keys()
#     values = dic_.values()
#     print(f"键 {keys}")
#     print(f"值 {values}")
#
#     key_list = list(dic_.keys())
#     value_list = list(dic_.values())
#     print(f"键：{key_list}")
#     print(f"值：{value_list}")
#
#     address = dic_['地址']
#     print(f"地址：{address}")
#
#     dic_['班级'] = 'python'
#     print(f"字典：{dic_}")
#
#     dic_.pop('地址')
#     print(f"字典：{dic_}")
#
#
#     n = dic_.get('工资', '该键不存在')
#     print(f"工资键对应的值：{n}")
#
#     _delete = list(dic_.keys())
#     _key = random.choice(_delete)
#     del dic_[_key]
#     print(f"字典：{dic_}")
#
#     dic_.clear()
#     print(f"清空后的字典：{dic_}")

# #12：自定义去重Python程序
#
# def remove_(list_1):
#     list_2 = []
#     set_1 = set()
#
#     for it in list_1:
#         if it not in set_1:
#             set_1.add(it)
#             list_2.append(it)
#     return list_2
#
# if __name__=="__main__":
#
#     list_1 = [1, 2, 2, 3, 3, 3,4, 4,  5, 5]
#     list_2 = []
#     set_1 = set()
#
#     for it in list_1:
#         if it not in set_1:
#             set_1.add(it)
#             list_2.append(it)
#     list_1 = list_2
#     print(list_1)

# #13：如下有两个关于省份的集合，实现集合A和集合B的如下功能：
# （1）格式化输出A和B集合的内容、长度
# （2）验证A最大值为湖北、最小值为上海
# （3）在集合A当中添加4个直辖市（不能使用for循环）
# （4）在集合B中添加2个特别行政区
# （5）集合A和集合B的交集的省份（需要用两种方法）
# （6）集合A和集合B的并集的省份（需要用两种方法）
# （7）集合A和集合B的不重复的省份
# （8）集合A和集合B的差集的省份（需要用两种方法）


if __name__=="__main__":
    A = {'河北', '上海', '哈尔滨', '内蒙古', '湖北'}
    B = {'上海', '青海', '海南', '浙江', '湖北', '内蒙古'}

    print(f"A的内容: {A}")
    print(f"B的内容: {B}")

    print(f"A的长度: {len(A)}")
    print(f"B的长度: {len(B)}")

    max_ = max(A)
    min_ = min(A)

    print(f"A的最大值是: {max_}")
    print(f"A的最小值是: {min_}")

    A.add('北京')
    A.add('天津')
    A.add('上海')
    A.add('重庆')
    print(f"更新后的A: {A}")

    B.add('香港')
    B.add('澳门')
    print(f"更新后B: {B}")

    # 方法一：
    nn_1 = A.intersection(B)
    print(f"方法一交集: {nn_1}")
    # 方法二：
    nn_2 = A & B
    print(f"方法二交集: {nn_2}")

    # 方法一：
    mm_1 = A.union(B)
    print(f"方法一并集: {mm_1}")
    # 方法二：
    mm_2 = A | B
    print(f"方法二并集: {mm_2}")

    difference_ = A.symmetric_difference(B)
    print(f"集合A和B的不重复的省份: {difference_}")

    # 方法一：
    A_B = A - B
    print(f"方法一：集合A减去集合B得到的差集: {A_B}")
    # 方法二：
    B_A = B - A
    print(f"方法二：集合B减去集合A得到的差集: {B_A}")
